<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // let map = new Map()
    // console.log(map);
    // console.log(typeof map);
    // 声明Map
    // let map = new Map(1, 2, 3)//  number 1 is not iterable 
    // let map = new Map([1, 2, 3])  // Iterator value 1 is not an entry object
    // 元素是数组 [key,value]
    let map = new Map([[1, 2], ['name', 'zs'], [4, 5], [{ name: 'zs' }, function () { }]])
    console.log(map);
    // 1、set(key,value)方法作用：给实例设置一对键值对，返回map实例。
    // 相同的属性名 会替换之前的属性
    map.set(4, 6)
    map.set(true, null)
    map.set({ age: 18 }, undefined)
    console.log(map);
    // 2、get(key) 通过属性名获取属性值
    console.log(map.get(1));
    console.log(map.get(4));
    console.log(map.get(true));
    console.log(map.get({ name: 'zs' }));
    let obj = { name: 'zs' }
    let obj1 = { name: 'zs' }
    console.log(obj == obj1);
    // 3、delete( )方法作用：删除指定的键值对，删除成功返回：true，否则返回：false。
    console.log(map.delete(1));
    console.log(map.delete({ name: 'zs' }));
    console.log(map);
    // 4、clear( )方法，让你一次性删除所有键值对。
    // map.clear()
    console.log(map);
    // 5、has() 判断属性是否存在 有返回true 没有 false
    // 6、entries( )方法作用：返回实例的键值对遍历器。
    console.log(map.entries());
    // 7、keys()  返回实例的键遍历器。
    // 8、values()  返回实例的键遍历器。
    // 9、forEach() 遍历
    // 10、size：获取实例的成员数。

</script>
<script>
    // weakMap和map区别
    // key只能是引用类型的值
    let wMap = new WeakMap([[{ name: "zs" }, 2]])
    console.log(wMap);
    wMap.set([4], 5)
    console.log(wMap);

</script>

</html>